package com.changgou.file.util;


import org.csource.fastdfs.*;
import org.springframework.core.io.ClassPathResource;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * 提供文件上传、删除
 */
public class FastDFSClient {
    public static void main(String[] args) throws Exception{
        //上传
        //文件
        File file=new File("C:\\Users\\Administrator.USER-20190316GW\\Desktop\\575968fcN2faf4aa4.png");
        byte[] bytes = Files.readAllBytes(Paths.get(file.getPath()));
        String url=upload(bytes,"png");
        System.out.println(url);

        //文件删除
        /**
        * 删除后可以到fastDFS确认，
        * docker exec -it storage /bin/bash
        * cd /data/fast_data/data/00/00
        */
        delete("group1","M00/00/00/wKgMqF37OuCAEalaAAJKTlfhw70824.png");

    }
    /**
     * 上传文件到fastDFS
     * @param bytes 文件字节数组
     * @param fileExtName 文件的扩展名（后缀）；如：jpg、png
     * @return 文件可访问地址
     */
    public static String upload(byte[] bytes, String fileExtName)throws Exception{
        /**
         * 上传文件
         * 参数1：文件字节数组
         * 参数2：文件扩展名
         * 参数3： 文件其它信息
         * 返回结果如下：
         * group1 组名
         * M00/00/00/575968fcN2faf4aa4.png 文件名
         * 如果一个可以访问的图片；它的地址如：http://192.168.12.168/group1/M00/00/00/575968fcN2faf4aa4.png
         */
        String[] uploadFile = createStorageClient().upload_file(bytes, fileExtName, null);
        for (String str : uploadFile) {
            System.out.println(str);
        }

        //获取存储服务器的ip
        FileInfo file_info = createStorageClient().get_file_info(uploadFile[0], uploadFile[1]);
        String url="http://"+file_info.getSourceIpAddr()+"/"+uploadFile[0]+"/"+uploadFile[1];

        //可以访问的文件地址
        return url;
    }
    /**
         * 删除文件
         * @param groupName 组名
         * @param remoteFilename 文件相对路径
         */
    public static void delete(String groupName,String remoteFilename) throws Exception{
        StorageClient storageClient = createStorageClient();
        storageClient.delete_file(groupName,remoteFilename);
    }


    //抽取的代码
    private static StorageClient createStorageClient() throws Exception{
        //配置文件
        String conf_filename = new ClassPathResource("fdfs_client.conf").getPath();
        System.out.println(conf_filename);

        //设置追踪服务器信息
        ClientGlobal.init(conf_filename);

        //创建追踪服务器客户端
        TrackerClient trackerClient = new TrackerClient();

        //创建追踪服务器
        TrackerServer trackerServer = trackerClient.getConnection();

        //创建文件存储服务器
        StorageServer storageServer=null;

        //创建文件存储客户端
        StorageClient storageClient = new StorageClient(trackerServer,storageServer);
        return storageClient;
    }
}
